<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>继承-for-in语句</title>
</head>

<body>
  <script>

    function Plane(w, h, x, y) {
      this.width = w;
      this.height = h;
      this.x = x;
      this.y = y;
    }
    Plane.prototype.move = function () {
      console.log('飞机，走你');
    }

    // 最顶层对象Object构造函数的原型对象：
    Object.prototype.attack = function () {
      console.log('攻击');
    }
    let p1 = new Plane(22, 33, 20, 20)

    // console.log(p1);

    let b = { x: 1000 };
    // console.log(b);
    // b 去继承p1对象的属于属性和方法；

    // 通过for-in语句，遍历对象的整个原型链上所有的属性和方法。再通过循环，一个个的赋值给目标对象。
    for (const k in p1) {
      // 不加IF判断，就会替换b对象自己x属性的值，
      console.log(k);  // width, height,x,y, move，attack这些属性
      if (b[k] === undefined) {
        b[k] = p1[k]
      }
    }

    console.log(b); //move（）也被继承了。

  </script>
</body>

</html>